package org.web.accesscontrollist.sdk.dto.query;

import jakarta.validation.constraints.*;
import java.util.Date;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import org.web.base.domain.QueryBase;

@Setter
@Getter
public class QueryAclResourceTypeRequest extends QueryBase {

    /**
     * 根据 'aclResourceTypeId' 精确查询, 'aclResourceTypeId' 表示主键，acl_user_resource_definition表主键。
     */
    private Integer aclResourceTypeId;

    /**
     * 设置 'aclResourceTypeId' 列表查询, 'aclResourceTypeId' 表示主键，acl_user_resource_definition表主键。
     */
    private List < Integer > aclResourceTypeIdList;

    /**
     * 根据 'businessLine' 精确查询, 'businessLine' 表示业务线，其作用有两点，用于针对不同业务，进行资源隔离，其次提供附加的操作记录变更的权限管理。
     */
    @NotBlank(message = "businessLine can't be blank. ")
    @Size(max = 100)
    private String businessLine;

    /**
     * 根据 'typeName' 精确查询, 'typeName' 表示资源类型名称，指定资源的类型名称，不允许为空，在相同的业务线下，不允许重名。
     */
    private String typeName;

    /**
     * 设置'typeName'列表查询, 'typeName' 表示资源类型名称，指定资源的类型名称，不允许为空，在相同的业务线下，不允许重名。
     */
    private List < String > typeNameList;

    /**
     * 根据 'isAllowShow' 精确查询, 'isAllowShow' 表示是否允许查询, 资源模块内部字段，在交互页面上，用于表示资源信息是否允许被所有人查看。enum={Y:允许;N:不允许}。
     */
    private String isAllowShow;

    /**
     * 根据 'typeExtendsValue' 精确查询, 'typeExtendsValue' 表示拓展值，供接入的业务单元，自行补充的内容，业务域自行扩展，自身并不做使用。
     */
    private String typeExtendsValue;

    /**
     * 根据 'typeOperateRule' 精确查询, 'typeOperateRule' 表示操作规则，按需使用，指定控制资源信息的修改校验的规则。
     */
    private String typeOperateRule;

    /**
     * 根据 'maxLevel' 精确查询, 'maxLevel' 表示最大层级，用于定义资源的最大层级。min=0,max=6。
     */
    private Integer maxLevel;

    /**
     * 根据 'firstLevelAlias' 精确查询, 'firstLevelAlias' 表示一级别名，用于定义资源详情的一级，是名称，不是描述，受max_level约束，小于等于max_level不允许为空。
     */
    private String firstLevelAlias;

    /**
     * 设置 'firstLevelAlias' 列表查询, 'firstLevelAlias' 表示一级别名，用于定义资源详情的一级，是名称，不是描述，受max_level约束，小于等于max_level不允许为空。
     */
    private List < String > firstLevelAliasList;

    /**
     * 根据 'secondLevelAlias' 精确查询, 'secondLevelAlias' 表示二级别名，用于定义资源详情的二级，是名称，不是描述，受max_level约束，小于等于max_level不允许为空。
     */
    private String secondLevelAlias;

    /**
     * 设置 'secondLevelAlias' 列表查询, 'secondLevelAlias' 表示二级别名，用于定义资源详情的二级，是名称，不是描述，受max_level约束，小于等于max_level不允许为空。
     */
    private List < String > secondLevelAliasList;

    /**
     * 根据 'thirdLevelAlias' 精确查询, 'thirdLevelAlias' 表示三级别名，用于定义资源详情的三级，是名称，不是描述，受max_level约束，小于等于max_level不允许为空。
     */
    private String thirdLevelAlias;

    /**
     * 设置 'thirdLevelAlias' 列表查询, 'thirdLevelAlias' 表示三级别名，用于定义资源详情的三级，是名称，不是描述，受max_level约束，小于等于max_level不允许为空。
     */
    private List < String > thirdLevelAliasList;

    /**
     * 根据 'fourthLevelAlias' 精确查询, 'fourthLevelAlias' 表示四级别名，用于定义资源详情的四级，是名称，不是描述，受max_level约束，小于等于max_level不允许为空。
     */
    private String fourthLevelAlias;

    /**
     * 设置 'fourthLevelAlias' 列表查询, 'fourthLevelAlias' 表示四级别名，用于定义资源详情的四级，是名称，不是描述，受max_level约束，小于等于max_level不允许为空。
     */
    private List < String > fourthLevelAliasList;

    /**
     * 根据 'fifthLevelAlias' 精确查询, 'fifthLevelAlias' 表示五级别名，用于定义资源详情的五级，是名称，不是描述，受max_level约束，小于等于max_level不允许为空。
     */
    private String fifthLevelAlias;

    /**
     * 设置 'fifthLevelAlias' 列表查询, 'fifthLevelAlias' 表示五级别名，用于定义资源详情的五级，是名称，不是描述，受max_level约束，小于等于max_level不允许为空。
     */
    private List < String > fifthLevelAliasList;

    /**
     * 根据 'operatorNum' 精确查询, 'operatorNum' 表示操作员ID，上次修改记录的操作人员工号，唯一标识操作人员。
     */
    private String operatorNum;

    /**
     * 设置 'operatorNum' 列表查询, 'operatorNum' 表示操作员ID，上次修改记录的操作人员工号，唯一标识操作人员。
     */
    private List < String > operatorNumList;

    /**
     * 根据 'operatorName' 精确查询, 'operatorName' 表示操作员姓名，上次修改记录的操作人员姓名。
     */
    private String operatorName;

    /**
     * 设置大于 'createTime' 查询, 'createTime' 表示创建时间，用于记录创建时间，该记录，后面不会再次被修改。
     */
    private Date moreThanCreateTime;

    /**
     * 设置小于 'createTime' 查询, 'createTime' 表示创建时间，用于记录创建时间，该记录，后面不会再次被修改。
     */
    private Date lessThanCreateTime;

    /**
     * 设置大于等于 'createTime' 查询, 'createTime' 表示创建时间，用于记录创建时间，该记录，后面不会再次被修改。
     */
    private Date equalAndMoreThanCreateTime;

    /**
     * 设置小于等于'createTime'查询, 'createTime' 表示创建时间，用于记录创建时间，该记录，后面不会再次被修改。
     */
    private Date equalAndLessThanCreateTime;

    /**
     * 设置大于 'updateTime' 查询, 'updateTime' 表示修改时间，用于记录修改时间，每次记录发生变更，都会变化。
     */
    private Date moreThanUpdateTime;

    /**
     * 设置小于 'updateTime' 查询, 'updateTime' 表示修改时间，用于记录修改时间，每次记录发生变更，都会变化。
     */
    private Date lessThanUpdateTime;

    /**
     * 设置大于等于 'updateTime' 查询, 'updateTime' 表示修改时间，用于记录修改时间，每次记录发生变更，都会变化。
     */
    private Date equalAndMoreThanUpdateTime;

    /**
     * 设置小于等于'updateTime'查询, 'updateTime' 表示修改时间，用于记录修改时间，每次记录发生变更，都会变化。
     */
    private Date equalAndLessThanUpdateTime;

    /**
     * 根据 'isDelete' 精确查询, 'isDelete' 表示是否删除，标记是否逻辑删除，enum={Y:删除;N:不删除}
     */
    @Pattern(regexp = "^([YN])$", message = "Y:删除;N:不删除")
    private String isDelete;

    @NotNull(message = "pageSize 不能为空")
    @Max(value = 200, message = "pageSize 不能大于200")
    public Integer getPageSize() {
        return super.getPageSize();
    }

}
